Til øvelsen har vi kigget på det udleverede eksempel, derudover har vi kigget rundt på nettet for at hente inspiration til at løse opgaven. nogle af de side vi har benyttet er How to access GPIO og ud fra denne har vi bygget vores kode.
biblioteker som <sys/mman.h> som kan mappe. Denne bruges til at mappe det fysiske hukommelse in i den virtuelle hukommelse og gør at vi kan arbejde med den.
Da vi ønkser at tilgå via den fysiske memory åbnes filen igennem /dev/mem.
Efter dette toogler vi outputtet med den følgende kode
virt_addr = map_base + (target & MAP_MASK);
// set gpio
*(unsigned long *) virt_addr = 0xFFFFFF0F;
// remap for stuff
virt_addr = map_base + (targetout & MAP_MASK);
while(1)
{
*(unsigned long *) virt_addr = 0x00000000;
printf("Sets gpio to low! \n");
printf("Sleep 5 sec.\n");
for(i=0; i<5; i++)
{
sleep(1);
}
*(unsigned long *) virt_addr = 0x000000F0;
printf("Sets gpio to high! \n");
printf("Sleep 5 sec.\n");
for(i=0; i<5; i++)
{
sleep(1);
}
}
I programmet castes virt_addr til en unsigned long, så det er den pointer peger på. Efter dette vælges der havd der skal skrives til registres og der fortsættes med GPIO INOUT
for at sikre at tingende forløber korrekt, sættes alle output til 0. På voltmeteret aflæses 0V, der bliver så talt 5 sec. og outputtet sættes til 1 og 5V blvier aflæst.
root@beagleboard:~# ./userspacedriver
/dev/mem opened.
Memory mapped at address 0x401cd000.
Sets gpio to low!
Sleep 5 sec.
Sets gpio to high!
Sleep 5 sec.
B)
Vi leger lidt rundt med det udleverede program, compiler det og kørte det.
Når programmet køre, looper noget af koden og på skærmen udskrives der: worst
i følgende del af koden ændres skeduleringspolitikken:
Øvelse 12
Til øvelsen har vi kigget på det udleverede eksempel, derudover har vi kigget rundt på nettet for at hente inspiration til at løse opgaven. nogle af de side vi har benyttet er How to access GPIO og ud fra denne har vi bygget vores kode.
biblioteker som <sys/mman.h> som kan mappe. Denne bruges til at mappe det fysiske hukommelse in i den virtuelle hukommelse og gør at vi kan arbejde med den.
Da vi ønkser at tilgå via den fysiske memory åbnes filen igennem /dev/mem.
følgende adresser benyttes
Efter dette toogler vi outputtet med den følgende kode
virt_addr = map_base + (target & MAP_MASK); // set gpio *(unsigned long *) virt_addr = 0xFFFFFF0F; // remap for stuff virt_addr = map_base + (targetout & MAP_MASK); while(1) { *(unsigned long *) virt_addr = 0x00000000; printf("Sets gpio to low! \n"); printf("Sleep 5 sec.\n"); for(i=0; i<5; i++) { sleep(1); } *(unsigned long *) virt_addr = 0x000000F0; printf("Sets gpio to high! \n"); printf("Sleep 5 sec.\n"); for(i=0; i<5; i++) { sleep(1); } }I programmet castes virt_addr til en unsigned long, så det er den pointer peger på. Efter dette vælges der havd der skal skrives til registres og der fortsættes med GPIO INOUTfor at sikre at tingende forløber korrekt, sættes alle output til 0. På voltmeteret aflæses 0V, der bliver så talt 5 sec. og outputtet sættes til 1 og 5V blvier aflæst.
B)
Vi leger lidt rundt med det udleverede program, compiler det og kørte det.
Når programmet køre, looper noget af koden og på skærmen udskrives der: worst
i følgende del af koden ændres skeduleringspolitikken: